package com.dh.spring.thread;

import java.util.Collection;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;

/**
 * 线程池功能接口
 * */
public interface CustomThreadPool<T> {

    //TODO 获取线程池初始线程大小
    int getInitThreadSize();

    //TODO 获取线程池核心线程大小
    int getCoreThreadSize();

    //TODO 获取线程池最大线程大小
    int getMaxThreadSize();

    //TODO 获取线程池活跃线程大小
    int getActiveThreadSize();

    //TODO 提交任务到线程池  @Param runnable  用户自定义线程执行任务单元(即任务执行逻辑)
    void executeRunnable(Runnable runnable);

    //TODO 提交任务到线程池  @Param runnable  用户自定义线程执行任务单元(即任务执行逻辑)
    FutureTask<Callable> executeCallable(Callable callable);

    //TODO 执行所有带返回值得任务
    <T> List<FutureTask<T>> invokeAll(Collection<? extends Callable<T>> tasks) throws InterruptedException;

    //TODO 获取线程池启停状态
    boolean isShutdown();

    //TODO 线程池执行关闭
    void shutdown();

    //TODO

    //TODO

    //TODO
}
